from DatoDeCompra import *
from Precio import *
from Ubicacion import *
from classes.ProxyDeTwitter import *
import re

class ProcesadorDeTweets:

#	def __init__(self, unProxyDeTwitter):
#		self._proxyDeTwitter = unProxyDeTwitter


	def obtenerDatosDeCompraPara(self, unProducto):

		proxyTwitter = ProxyDeTwitter()
		conjuntoDeTweets = proxyTwitter.obtenerTweetsCon( set(['#precioJusto', unProducto.nombre()]) )

		conjuntoDeDatos = self._procesarTweets( conjuntoDeTweets, unProducto )

		return conjuntoDeDatos


	def _procesarTweets( self, conjuntoDeTweets, unProducto ):
		
		regexp = re.compile(
			unProducto.nombre()					# nombre del producto
			+ ' '
			+ '(?P<sim>\$ ?)?'					# opcionalmente: simbolo "$" seguido opcionalmente de un espacio
			+ '(?P<pesos>[0-9]+)'				# entero de uno o mas digitos
			+ '((,|\.)(?P<centavos>[0-9]{2}))?'	# opcionalmente: coma o punto seguido de 2 digitos decimales
			+ '(?(sim)| pesos?)'				# si no hubo "$": matchear " peso" o " pesos"
			+ ' '
			+ unProducto.unidad()				# unidad
			+ ' (?P<calle>[a-z0-9 ]+)'			# calle
			+ ' (?P<altura>[0-9]+)'				# altura
			, re.I)

		datosDeCompra = set();
				
		for tweet in conjuntoDeTweets:
			match = regexp.match( tweet.texto() )
			
			if match is not None:
				pesos, centavos, calle, altura = match.group('pesos', 'centavos', 'calle', 'altura')

				if centavos is None:
					centavos = 0
				
				unPrecio = Precio(int(pesos), int(centavos), '$')
				unaUbicacion = Ubicacion(calle, altura)
				
				unDatoDeCompra = DatoDeCompra(unProducto, unPrecio, unaUbicacion)
				datosDeCompra.add( unDatoDeCompra )

		return datosDeCompra
